#pragma once


namespace rt
{

struct Ray;
struct Ray4;
struct Ray4_SingleOrigin;
class Scene;
class RT_Memory;

struct __declspec(align(16)) RayPacketTraceResult
{
	XMVECTOR Colors[4];
};

void renderImage(RT_Memory & renderTarget, Scene & scene, int width, int height, bool previewRender);

XMVECTOR traceRay(const Ray & ray, const Scene & scene);
void traceSingleOriginRayPacket(const Ray4_SingleOrigin & packet, const Scene & scene, RayPacketTraceResult & result, uint recursionDepth);
void traceRayPacket(const Ray4 & packet, const Scene & scene, RayPacketTraceResult & result, uint recursionDepth);

}